package guigu.Collection;

import org.junit.Test;

import java.util.*;

/**
 * 二、集合框架
 *      |----Collection接口：单列集合，用来存储一个一个的对象
 *           |----List接口：存储有序的、可重复的数据。 --->"动态数组"
 *                  |---ArrayList、LinkedList、Vector
 *
 *          |----Set接口：存储无序的、不可重复的数据。 --->高中讲的“集合”
 *                 |---HashSet、LinkedHashSet、TreeSet
 *
 *     |----Map接口：双列集合，用来存储一对(key - value)一对的数据。----高中函数：y = f(x)
 *         |----HashMap、LinkedHashMap、TreeMap、Hashtable、Properties
 *
 *  三、Collection接口中的方法的使用
 */
public class CollectionTest {
    @Test
    public void test1()
    {
        Collection coll = new ArrayList();
        coll.add("AA");
        coll.add("bb");
        coll.add("cc");
        coll.add(new Date());
        //1、size()获取添加的元素的个数
        System.out.println(coll.size());

        //2、addAll(Collection coll1):将coll1集合中的元素添加到当前的集合中
        Collection coll1 = new ArrayList();
        coll1.add(152);
        coll1.add("DD");
        coll.addAll(coll1);
        System.out.println(coll.size());
        System.out.println(coll);

        coll.clear();
        //3、isEmpty()
        System.out.println(coll.isEmpty());

        //4、clear()
        coll.clear();
    }

    /*
    向Collection接口的实现类的对象中添加数据obj时，要求obj所在类要重写equals().
     */
    @Test
    public void test2()
    {
        Collection coll = new ArrayList();
        coll.add(265);
        coll.add("AA");
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("jerry",20));

        //5、contains(Object obj):判断当前集合中是否包含obj，我们在判断时会调用obj对象所在类的equals().
        boolean contains = coll.contains(265);
        System.out.println(contains);
        System.out.println(coll.contains(new String("Tom")));
        System.out.println(coll.contains(new Person("jerry",20)));

        //6、containsAll(Collection coll1):判断形参coll1中的所有元素是否都存在于当前集合中
        Collection coll1 = Arrays.asList(265,"AA");
        System.out.println(coll1);
        System.out.println(coll.containsAll(coll1));
    }
    @Test
    public void test3()
    {
        Collection coll = new ArrayList();
        coll.add(265);
        coll.add("AA");
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("jerry",20));

        //7、remove(Object obj):从当前集合中移除obj元素
       // coll.remove(265);
        //System.out.println(coll);

        //8、removeAll():差集：从当前集合中移除coll1中的所有的元素
       // Collection coll1 = Arrays.asList(256,"AA");
       // coll.removeAll(coll1);
        //System.out.println(coll);

        //9、retainAll(Collection coll1):交集：获取当前集合和coll1集合的交集。并返回给当前集合
       //coll1 = Arrays.asList(265,"AA");
//        coll.retainAll(coll1);
//        System.out.println(coll);
        //10、equals(Object obj):判断当前集合和形参的元素是否相同
        Collection coll1 = new ArrayList();
        coll1.add(256);
        coll1.add("AA");
        coll1.add(new String("Tom"));
        coll1.add(false);
        coll1.add(new Person("jerry",20));
        coll1.add("AA");
        System.out.println(coll.equals(coll1));
       /* ArrayList coll2 = (ArrayList)coll1;
        int aa = coll2.indexOf("AA");
        System.out.println(aa);*/
    }
    @Test
    public void test4()
    {
        Collection coll = new ArrayList();
        coll.add(265);
        coll.add("AA");
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("jerry",20));

        //11、hashCode():返回当前对象的哈希值
        System.out.println(coll.hashCode());

        //12、集合-->数组：toArray()
        Object[] objects = coll.toArray();
        for(int i=0;i<objects.length;i++)
        {
            System.out.println(objects[i]);
        }
        //拓展：数组--->集合
        List<String> strings = Arrays.asList(new String[]{"AA", "BB", "CC"});
        System.out.println(strings);

        //小心
        List<int[]> ints = Arrays.asList(new int[]{123, 456});
        System.out.println(ints.size());//1个元素

        List<Integer> integers = Arrays.asList(new Integer[]{123, 456});
        System.out.println(integers.size());//2个元素
    }
}
